import { app, shell, BrowserWindow, ipcMain } from 'electron'
import { join } from 'path'
import { electronApp, optimizer, is } from '@electron-toolkit/utils'
import icon from '../renderer/src/assets/img/icon.ico?asset'
import { registerIpcHandlers } from './service/ipcHandlers' // 导入IPC处理函数
// 声明全局变量存储主窗口
declare global {
  namespace NodeJS {
    interface Global {
      mainWindow: BrowserWindow | null
    }
  }
}

global.mainWindow = null
function createWindow(): void {
  // 1. 创建浏览器窗口
  const mainWindow = new BrowserWindow({
    width: 1400, // 窗口宽度
    height: 700, // 窗口高度
    show: false, // 创建时隐藏窗口
    autoHideMenuBar: true, // 自动隐藏菜单栏

    ...(process.platform === 'linux' ? { icon } : {}), // 设置Linux平台下的窗口图标
    webPreferences: {
      // autoplayPolicy: 'no-user-gesture-required', // 允许无手势自动播放
      preload: join(__dirname, '../preload/index.js'), // 预加载脚本路径
      sandbox: false, // 禁用沙箱模式
      devTools: true // 开发环境打开DevTools
    }
  })
  // 存储主窗口到全局
  global.mainWindow = mainWindow

  // 当窗口准备好显示时，展示窗口
  mainWindow.on('ready-to-show', () => {
    mainWindow.show()
  })

  // 处理新窗口打开请求，使用默认浏览器打开外部链接
  mainWindow.webContents.setWindowOpenHandler((details) => {
    shell.openExternal(details.url)
    return { action: 'deny' }
  })
  // if (process.env['ELECTRON_RENDERER_URL']) {
  // mainWindow.loadFile(join(__dirname, '../renderer/index.html'))
  // }
  // 开发环境热重载配置
  if (is.dev && process.env['ELECTRON_RENDERER_URL']) {
    mainWindow.loadURL(process.env['ELECTRON_RENDERER_URL']) // 加载开发服务器URL
    // 打开开发者工具
    mainWindow.webContents.openDevTools()
  } else {
    mainWindow.loadFile(join(__dirname, '../renderer/index.html')) // 加载生产环境HTML文件
  }
}
// --------------生命周期---------------
// 1- 当Electron初始化完成且准备创建浏览器窗口时调用
app.whenReady().then(() => {
  // 设置应用用户模型ID（Windows平台）
  electronApp.setAppUserModelId('com.electron')

  // 监听新窗口创建事件，优化窗口快捷键处理（如F12打开开发者工具）
  app.on('browser-window-created', (_, window) => {
    optimizer.watchWindowShortcuts(window)
  })

  // IPC通信测试（接收'ping'消息并打印'pong'）
  ipcMain.on('ping', () => console.log('pong'))

  // 创建主窗口
  createWindow()
  registerIpcHandlers() // 注册IPC处理函数
  // macOS平台特定处理：当dock图标被点击且没有打开的窗口时，重新创建窗口
  app.on('activate', function () {
    if (BrowserWindow.getAllWindows().length === 0) createWindow()
  })
})

// 2- 当所有窗口关闭时的行为
app.on('window-all-closed', () => {
  // 在非macOS平台上，关闭应用
  if (process.platform !== 'darwin') {
    app.quit()
  }
})
